/**
 * 1.第一种是不对异常进行处理，这会将异常向外抛出，所谓的外就是指调用者
 * 如下，如果调用foo()的地方不处理异常，则异常将按照bar，demo的顺序逐个抛出
 * 如果最顶层都没有处理异常，则demo后续的代码将无法执行
 */
// function foo() {
//   throw new Error('error message...')
// }
//
// function bar() {
//   foo()
// }
//
// function demo() {
//   bar()
// }
//
// demo()
// console.log('后续的代码执行。。。')

/**
 * 2. 第二种是使用try-catch进行处理，可以在任何一层进行处理
 * 也有finally的操作，不管如何都会处理
 */
function foo() {
  throw new Error('error message...')
}

function bar() {
  try {
    foo()
  } catch (e) {
    //处理异常的逻辑
    console.log(e.message)
  } finally {
    console.log('不管有没有异常，finally代码都会执行，一般进行一些收尾操作')
  }
}

function demo() {
  bar()
}

demo()
console.log('后续的代码执行。。。')
